package br.com.future.util;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class AgendaTituloAtrasado implements ServletContextListener {
	static Scheduler sched;
	
	//Esse métodos Significa que irá entrar ao iniciar o contexto da aplicação.
	public void contextInitialized(ServletContextEvent ce) {
		try {
			  	System.out.println("Iniciando a Aplicação Advocacia LCA");
	            
			  	//Job Detail é a minha classe para contruir um "job" uma tarefa a ser agendada pelo Schadule
			  	JobDetail job = JobBuilder.newJob(TituloJob.class)
	                .withIdentity("Tarefa de Controle de Titulos Pagos", "group1")
	                .build();
	            //Trigger é como se fosse a do Banco de dados, é o gatilho que irá atribuir de quanto em quanto tempo
			  	//meu job será executado
	            Trigger trigger = TriggerBuilder.newTrigger()
	                .withIdentity("Controlar Pagamentos em Atraso Trigger", "group1")
	                .withSchedule(CronScheduleBuilder.cronSchedule(" 0 10 * * * ?"))
	                .build();
	            //Chamo a fabrica de tarefas e dou um start. Após isso faço o schadulejob(agendar tarefa)
	            //passando o meu job e depois a trigger
	            //siginifica que para aquela tarefa(job) ele irá usar aquele tempo do gatilho(trigger) 
	            sched = new StdSchedulerFactory().getScheduler();
	            sched.start();
	            sched.scheduleJob(job, trigger);
			  
	        } catch (Exception e) {
	            System.out.println("erro - " + e.getMessage());
	            e.printStackTrace();
	        }
	}

	public void contextDestroyed(ServletContextEvent arg0) {
		try {
			AgendaTituloAtrasado.sched.shutdown(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
